Distributed processing relates to performing computer processing tasks-over multiple computer systems. In distributed processing, each system performs a part of the task to process. Conventional workload management systems favor the distribution of large programs separately among a cooperating group of network nodes. These methods work to optimize the performance of each single application without regard to performance of other programs presently in the system. Additionally, these systems generally require an intervention by a system administrator, user input or advance knowledge of program behavior and/or resource needs, uniform system metrics and/or a homogeneous platform. Thus, it is highly desirable to have a workload management system which avoids all the foregoing requirements. Further, it is highly desirable to have a flexible and adaptable system for sharing heterogeneous network resources to execute computer programs in a timely manner as if they were run alone on a single workstation.
The existing distributed processing methods to cluster workstations rely on hardware or operating system specific tuning information such as number of swapped users, user queue length, and paging sets. Thus, it is also highly desirable to have a distributed processing system which is capable of dynamically generating statistics relating to performance of various platforms and operating systems in an agnostic fashion. At the same time, it is also highly desirable to have additional platforms and workstations that dynamically participate in the cluster.
As a network of workstations grows, it is important to be able to take an advantage of unutilized central processing unit (CPU) resources anywhere in the network. Java, for example, helps code portability by running code in its own Java virtual machine (JVM) that hides the details of the platform from the application program. However, when portable codes are employed, more efficient services which are available on specific systems and platforms often cannot be utilized and thus performance typically becomes degraded when using such codes. For instance, a code such as Java developed to run anywhere may not be able take advantage of unique hardware and/or software features of a specific platform. Therefore, it is highly desirable to have a method and system for enabling an object running in a Java Virtual Machine to uniquely identify its location while remaining similar to other distributed versions of the same object in name and type. It is also desirable to have a work unit take advantage of platform features while remaining truly system agnostic.
Further yet, other existing methods require a systems programmer to update a configuration file which the distribution software reads to learn about which workstation has which special hardware/software features. Moreover, these existing methods require different versions of the same application, for example, one version that runs on operating system A, another version that runs with version B, another version that checks if hardware C is available. Thus, it is highly desirable to have a method and system enabled to perform distributed processing without the need to have special configuration information related to a particular workstation. It is also highly desirable to have such a method and system take advantage of the special configuration information if available. Moreover, it is also highly desirable to have such a method and system run the same copy of an application on any platform/version/operating system.